/*
    内部类测试类
    一个类中可以存在的成员：
        成员变量
        成员方法
        构造方法
        代码块
        内部类
 */
public class Test {
    public static void main(String[] args) {
        //创建一个外部类
        A a = new A();
        int t1 = a.a;
        a.mA();
        //内部类的创建方式
        A.B b = new A().new B();
        A.B b1 = a.new B();
        int t2 = b.b;
        b.mB();
        //内部静态类的创建方式
        //静态成员的调用通过(外部类名.内部类名.xxx)调用
        A.C c = new A.C();
        System.out.println(c.nameC+" "+c.c1+" "+A.C.c2);
        c.methodC();
        System.out.println(c.nameC);
        A.C.mC();
        //c.namec = "修改" ; -> 默认加final，无法修改

        /*
         匿名内部类 -> 通过继承或者实现关系来达成
            作用：继承抽象类 / 实现接口
         */
        //继承抽象类
        //如果不用A类对象接收，直接调用方法时，叫做匿名方法 -> 此时只能调用一个方法 -> 下面接口例子同理
        /*匿名方法
         new A() {
            @Override
            public void mA() {
                super.mA();
                System.out.println("匿名内部类重写内容");
            }
         }.mA();
         */
        A hideA = new A() {
            @Override
            public void mA() {
                super.mA();
                System.out.println("匿名内部类重写内容");
            }
        };
        //实现接口
        InterfaceA interfaceA = new InterfaceA() {
            @Override
            public void methodA() {
                System.out.println("匿名内部类实现接口的方法");
            }
        };
    }
}